package com.hbut.day02;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
import java.util.*;

/**
 * @author PJM
 * @date 2025/6/21-9:53
 */
public class Test {

    // 处理数据，字符子类，数值类型
    // int short long byte   double float  char 字符型    boolean      true 1 false 0
    // gbk gb2312 utf-8
    // String 用于处理字符串的数据类型  ""  字符串的拆分，截取，取单个字符

    public static void main(String[] args) throws Exception{
        // 读取数据的操作，使用io包下提供的工具类
        // BufferedReader创建对象时，需要一个字符流对象，作为参数传入
        Reader reader = new FileReader("./人员名单.txt");
        BufferedReader br = new BufferedReader(reader);
        // 使用line变量，接收读取到的一行数据
        String line = null;
//        //什么年级有多少人
//        Map<String,Integer> map = new HashMap<>();
//        while ((line=br.readLine()) != null){
//            int index = line.lastIndexOf("，");
//            String grade = line.substring(index+1);
//            if (map.get(grade)==null){
//                // 没有对应的key-value可以存储新的数据
//                map.put(grade, 1);
//            }else {
//                Integer value = map.get(grade);
//                map.put(grade, value+1);
//            }
//        }
//        // 流操作完毕之后，一定要关闭流对象
//        br.close();
//        //方式一
//        // map的循环操作 ，根据key值来进行遍历，根据Entry对象来进行遍历
//        Set<String> keySet = map.keySet();
//        // 通过容器获得容器对应的迭代器对象
//        Iterator<String> iterator = keySet.iterator();
//        // hasNext方法返回一个boolean值，用于判断容器中是否存在下一个元素，true，不存在返回false
//        while (iterator.hasNext()){
//            String key = iterator.next();
//            System.out.println(key+"年级人数是："+map.get(key));
//        }
//        //方式二
//        //map的循环操作，根据key值来进行遍历，根据entry对象来进行遍历
//        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
//        for (Map.Entry<String,Integer> entry : entrySet){
//            System.out.println(entry.getKey()+"年级的人数是"+entry.getValue());
//        }

        //什么年级有多少专业，人员是什么
        Map<String,Map<String,List<String>>> map = new HashMap<>();
        while ((line=br.readLine()) != null){
            int index = line.lastIndexOf("，") + 1;
            String grade = line.substring(index); // 年级
            int preIndex = line.lastIndexOf("，", index - 2);
            String major = line.substring(preIndex+1, index-1); // 专业
            if (map.get(grade) == null){ // 先根据年级
                Map<String,List<String>> majorMap = new HashMap<>();
                List<String> list = new ArrayList<>();
                list.add(line);
                majorMap.put(major, list); // 专业  --  人的集合
                map.put(grade, majorMap);
            }else {
                Map<String,List<String>> majorMap = map.get(grade);
                // 判断专业map集合中，是否已经有该专业信息
                if (majorMap.get(major) == null){
                    List<String> newList = new ArrayList<>();
                    newList.add(line);
                    majorMap.put(major, newList);
                }else {
                    List<String> list = majorMap.get(major);
                    list.add(line);
                }
            }
        }
        // 流操作完毕之后，一定要关闭流对象
        br.close();
        for (String key : map.keySet()){
            Map<String,List<String>> majorMap = map.get(key);
            System.out.println(key+"年级下的专业数量："+majorMap.size());
            System.out.println("专业如下：");
            for (String majorKey : majorMap.keySet()){
                System.out.println("专业名称："+majorKey);
                System.out.println("人员如下：");
                List<String> list = majorMap.get(majorKey);
//                list.stream().forEach(System.out :: println);
                for (int i=0 ; i<list.size(); i++){
                    System.out.println(list.get(i));
                }
            }
        }

    }
}
